View Issue Details

IDProjectCategoryView StatusLast Update
0001219K18X001.00 SKB SWANSWpublic2021-05-10 11:07
Reporter(ALTech) Wooshin Kang Assigned To(ALTech) Wooshin Kang Due Date2021-05-06 09:08
PriorityhighSeveritys2-severeReproducibilitysometimes
Status closedResolutionfixed 
Summary0001219: [SWAN] Apply attached patch for no a/v of 73 channel.
DescriptionAttached patch is for solving no A/V after aging of UAMX channel.
Please apply it.
TagsNo tags attached.
Attach Tags

Users monitoring this issue

User List There are no users monitoring this issue.

Activities

(ALTech) Wooshin Kang

2021-05-05 08:12

developer  

0001-SKB-AI2-MAX-UHD-aging-debug6-patch.patch (8,165 bytes)   
From f9c116f912ce0116b4803efbc099d2745ff9770f Mon Sep 17 00:00:00 2001
From: Tony Kim <Tony.Kim@synaptics.com>
Date: Fri, 30 Apr 2021 20:56:59 +0900
Subject: [PATCH] [SKB-AI2 MAX] UHD aging debug6 patch

---
 amp/src/ddl/dmx/comp/core/inc/dmx_stream.h         |  8 ++++
 .../vcodec/comp_vdec/source/internal_vdec_api.c    | 52 ++++++++++++++++++++++
 2 files changed, 60 insertions(+)

diff --git a/amp/src/ddl/dmx/comp/core/inc/dmx_stream.h b/amp/src/ddl/dmx/comp/core/inc/dmx_stream.h
index 9a4e38c..99a190e 100755
--- a/amp/src/ddl/dmx/comp/core/inc/dmx_stream.h
+++ b/amp/src/ddl/dmx/comp/core/inc/dmx_stream.h
@@ -52,9 +52,17 @@
 #include "dmx_al_cnn.h"
 
 /**< Below default size defined for DMX stream buffer*/
+#if 1 //tony debug
+#define DMX_STRM_VES_BUF_SIZE           (16*1024*1024)   /*For video channel*/
+#else
 #define DMX_STRM_VES_BUF_SIZE           (8*1024*1024)   /*For video channel*/
+#endif 
 #define DMX_STRM_VES_SMALLBUF_SIZE      (4*1024*1024)   /*For video channel*/
+#if 1
+#define DMX_STRM_VES_BUF_PADDINGSIZE    (4*1024*1024)
+#else
 #define DMX_STRM_VES_BUF_PADDINGSIZE    (64*1024)
+#endif
 #define DMX_STRM_VES_BIGBUF_PADDINGSIZE (2*1024*1024)
 #define DMX_STRM_AES_BUF_SIZE           (512*1024)      /*For audio channel*/
 #define DMX_STRM_AES_BUF_PADDINGSIZE    (4*1024)
diff --git a/amp/src/ddl/vcodec/comp_vdec/source/internal_vdec_api.c b/amp/src/ddl/vcodec/comp_vdec/source/internal_vdec_api.c
index fc0a083..b2d59ac 100755
--- a/amp/src/ddl/vcodec/comp_vdec/source/internal_vdec_api.c
+++ b/amp/src/ddl/vcodec/comp_vdec/source/internal_vdec_api.c
@@ -5859,6 +5859,7 @@ HRESULT decode_video(VDecoder *pVDec) {
     VMETA_CBLOCK *pCblk = pVDec->pStrmCtrlBlock->pVir;
     MV_UNUSED(pCblk);
 
+    VDECPRT("tony trace inside decode_stream_main_loop - 2-1. enter decode_video() \n", __LINE__);
     if (pHalDecoder->check_strm_buffer
           && (pVDec->bInFlush == false)
           && (pCblk->uFrameInMode == FRAME_IN_NO_32B_ALIGN)
@@ -5893,6 +5894,7 @@ HRESULT decode_video(VDecoder *pVDec) {
         return SUCCESS;
     VdecAssertReturn(hRet);
 
+    VDECPRT("tony trace inside decode_stream_main_loop - 2-2. before pHalDecoder->decode_stream() \n", __LINE__);
     while (1) {
         int dret = 0;
         int ud;
@@ -5909,6 +5911,7 @@ HRESULT decode_video(VDecoder *pVDec) {
             VDEC_LOGE("%p: pHalDecode recoverable error=%d, continue to decode", pVDec, dret);
         }
 
+    VDECPRT("tony trace inside decode_stream_main_loop - 2-3. before waitIRQ() \n", __LINE__);
         if(pHalDecoder->waitIRQ){
             if (pVdecStrmStatus->wait_for_int) {
                 //VDECPRT("%p:before Int\n", pVDec);
@@ -5919,6 +5922,7 @@ HRESULT decode_video(VDecoder *pVDec) {
             }
         }
 
+    VDECPRT("tony trace inside decode_stream_main_loop - 2-4. after waitIRQ() \n", __LINE__);
         performance_monitor(pVDec, pVdecStrmStatus, ud);
 #ifndef TRUSTZONE
         if((pVdecStrmStatus->event_id == VDEC_EVENT_SYNCWORD) && (pCblk->uiUserDataMask != 0)){
@@ -5948,6 +5952,7 @@ HRESULT decode_video(VDecoder *pVDec) {
         break;
     }
 
+    VDECPRT("tony trace inside decode_stream_main_loop - 2-5. if we reach here.... () \n", __LINE__);
     // if we reach here,
     // 1) One frame decoding finished, switch point comes
     // 2) VDEC_EVENT_ALLOC_STR_BUF
@@ -6423,6 +6428,7 @@ INT decode_stream_main_loop(VDecoder *pVDec) {
             SETSTATE(pVDec->eState, VDEC_STATE_WAIT_INPUT_BUFFER);
             return 0;
         }
+    VDECPRT("tony trace inside decode_stream_main_loop - 1. after VDEC_STATE_WAIT_INPUT_BUFFER \n", __LINE__);
         if (pVDec->uiDecodedIndex > 0) {
             // judge the display buffer number, in case the VDEC_EVENT_ALLOC_DIS_BUF event
             unsigned int uNum;
@@ -6432,20 +6438,24 @@ INT decode_stream_main_loop(VDecoder *pVDec) {
                 return 0;
             }
         }
+    VDECPRT("tony trace inside decode_stream_main_loop - 2. after VDEC_STATE_WAIT_OUTPUT_BUFFER \n", __LINE__);
 
         if (decode_video(pVDec) != SUCCESS)
             break;
+    VDECPRT("tony trace inside decode_stream_main_loop - 3. after decode_video \n", __LINE__);
         msg.m_MsgID = CMD_NONE;
         while (MV_CC_MsgQ_TryGetMsg(pVDec->hDecodeMsgQueue, &msg) == S_OK) {
             AMP_ASSERT(msg.m_MsgID != (UINT32) CMD_NONE);
             if (msg.m_MsgID == CMD_FREEZE) {
                 msg.m_Param2 = TRUE;
                 VDECLOGIFERR(MV_CC_MsgQ_PostMsg(pVDec->hDecodeMsgQueue, &msg));
+    VDECPRT("tony trace inside decode_stream_main_loop - 4. hDecodeMsgQueue \n", __LINE__);
                 return 0;
             }
             decode_stream_process_msg(pVDec, &msg);
             if (msg.m_MsgID == CMD_TERMINATE) {
                 VDECPRT("%p Exit Decode task\n", pVDec);
+    VDECPRT("tony trace inside decode_stream_main_loop : 5. CMD_TERMINATE proceeded \n", __LINE__);
                 return -1;
             }
             msg.m_MsgID = CMD_NONE;
@@ -6547,6 +6557,42 @@ VOID VideoStatusProcess(VOID *hVDec) {
     }
 }
 
+
+const char* msg2str[] = 
+{
+    //CMD_NONE = -1,          // invalid cmd/msg.
+    "CMD_RUN",                // start video processing.
+    "CMD_TERMINATE",          // exit working thread.
+    "CMD_PAUSE",
+    "CMD_RESUME",
+    "CMD_STOP",               // stop and go to IDLE.
+    "CMD_IBUFNOTIFY",         // notify stream buffer pushed to vMeta,
+                            // if in WAIT_INPUT_BUFFER.
+    "CMD_OBUFNOTIFY",         // notify display buffer returned to us,
+                            // if in WAIT_OUTPUT_BUFFER.
+    "CMD_IOCTRL",             // io control command that operates vMeta.
+
+    "MSG_EMPTY_THIS_BUFFER",  // A stream buffer pushed to us.
+    "MSG_FILL_THIS_BUFFER",   // A display buffer returned to us.
+
+    "CMD_STARTGOP",           // notify stream task the start of gop.
+    "CMD_RELOADGOP",          // notify stream task to reload gop.
+
+    "CMD_FREEZE",             // notify come to freeze state
+    "CMD_UNFREEZE",           // nofity return from freeze state
+
+    "ACK_OK",                 // CMD is done successfully.
+};
+const char* msgtostr(int msgID){
+    if(msgID >= CMD_RUN && msgID <= ACK_OK)
+        return msg2str[msgID];
+    else {
+        return "invalid command";
+    }
+}
+
+int tony_counter=0;
+#include <sys/types.h>
 VOID VDec_Decode_Task(VOID *hVDec) {
     MV_CC_MSG_t msg;
     VDecoder *pVDec = (VDecoder *) hVDec;
@@ -6561,9 +6607,12 @@ VOID VDec_Decode_Task(VOID *hVDec) {
     VDECLOGIFERR(MV_Timer_CreateEx(&pVDec->hStatusLogTimer, pVDec->uiStatusLogPeriod * 1000,
                                    VideoStatusProcess, hVDec, "VideoStatusProcess"));
     VDECLOGIFERR(MV_Timer_Start(&pVDec->hStatusLogTimer));
+    pid_t tid = gettid();
     while (1) {
         msg.m_MsgID = CMD_NONE;
+        VDEC_LOGH("tony trace VDec comp event loop before(tid=%d) - tony_counter=%d\n", tid, ++tony_counter);
         MV_CC_MsgQ_GetMsg(pVDec->hDecodeMsgQueue, &msg);
+        VDEC_LOGH("tony trace VDec comp event loop after(msgID = %d(%s), (tid=%d)) - tony_counter=%d\n", msg.m_MsgID, msgtostr(msg.m_MsgID), tid, --tony_counter);
         AMP_ASSERT(msg.m_MsgID != (UINT32) CMD_NONE);
         if (msg.m_MsgID == CMD_FREEZE) {
             VDEC_LOGH("%p:receive freeze\n", pVDec);
@@ -6585,10 +6634,13 @@ VOID VDec_Decode_Task(VOID *hVDec) {
         if (bStreamFreeze == FALSE) {
             decode_stream_process_msg(pVDec, &msg);
 
+            VDEC_LOGH("tony trace before decode_stream_main_loop() state = %d\n", pVDec->eState);
             if (decode_stream_main_loop(pVDec) < 0) {
+                VDEC_LOGH("tony trace ERROR in  decode_stream_main_loop() state = %d\n", pVDec->eState);
                 VDEC_LOGH("%p:Exit Decode task\n", pVDec);
                 return;
             }
+            VDEC_LOGH("tony trace after decode_stream_main_loop() state = %d\n", pVDec->eState);
         }
     }
 }
-- 
2.7.4

(SW) River Wong

2021-05-05 14:05

developer   ~0006996

Code commited to bitbucket.

commit faf324ecf249cee1b54de7a6f68f6426f6d9780b
Author: river wong <river.wong@fii-foxconn.com>
Date: Wed May 5 14:01:48 2021 +0800

    Apply Synaptics patch for solving no A/V after aging of UAMX channel(channel 73)

Issue History

Date Modified Username Field Change
2021-05-05 08:12 (ALTech) Wooshin Kang New Issue
2021-05-05 08:12 (ALTech) Wooshin Kang Status new => assigned
2021-05-05 08:12 (ALTech) Wooshin Kang Assigned To => (SW) Jacky Chiang
2021-05-05 08:12 (ALTech) Wooshin Kang File Added: 0001-SKB-AI2-MAX-UHD-aging-debug6-patch.patch
2021-05-05 10:27 (SW) Jacky Chiang Assigned To (SW) Jacky Chiang => (SW) River Wong
2021-05-05 14:05 (SW) River Wong Assigned To (SW) River Wong => (ALTech) Wooshin Kang
2021-05-05 14:05 (SW) River Wong Status assigned => resolved
2021-05-05 14:05 (SW) River Wong Resolution open => fixed
2021-05-05 14:05 (SW) River Wong Note Added: 0006996
2021-05-10 11:07 (ALTech) Wooshin Kang Status resolved => closed